
#include "nane/CodecSystem/Sound/OGG/OGGSoundCodecSystem.h"
#include "nane/CodecSystem/Sound/OGG/OGGSoundDecoder.h"
#include "nane/CodecSystem/Sound/OGG/OGGSoundEncoder.h"

namespace nane
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    OGGSoundCodecSystem::OGGSoundCodecSystem()
    {
        
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    OGGSoundCodecSystem::~OGGSoundCodecSystem()
    {
        
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    bool OGGSoundCodecSystem::Initialize()
    {
        return true;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void OGGSoundCodecSystem::Shutdown()
    {
        
    }    
    ////////////////////////////////////////////////////////////////////////////////////////////////
    const char* OGGSoundCodecSystem::GetFileType()
    {
        return "ogg";
    }    
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ISoundDecoder* OGGSoundCodecSystem::CreateDecoder( IInputRef* _input )
    {
        OGGSoundDecoder* oggDecoder = new OGGSoundDecoder();
        if( oggDecoder->Initialize(_input) == false )
        {
            delete oggDecoder;
            oggDecoder = NULL;
        }
        return oggDecoder;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ISoundDecoder* OGGSoundCodecSystem::CreateDecoder( IInputSeekableRef* _inputSeekable )
    {
        OGGSoundDecoder* oggDecoder = new OGGSoundDecoder();
        if( oggDecoder->Initialize(_inputSeekable) == false )
        {
            delete oggDecoder;
            oggDecoder = NULL;
        }
        return oggDecoder;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void OGGSoundCodecSystem::ReleaseDecoder( IDecoder* _decoder )
    {
        OGGSoundDecoder* oggDecoder = static_cast<OGGSoundDecoder*>(_decoder);
        oggDecoder->Shutdown();
        delete oggDecoder;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ISoundEncoder* OGGSoundCodecSystem::CreateEncoder( IOutputRef* _output )
    {
        OGGSoundEncoder* oggEncoder = new OGGSoundEncoder();
        if( oggEncoder->Initialize(_output) == false )
        {
            delete oggEncoder;
            oggEncoder = NULL;
        }
        return oggEncoder;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void OGGSoundCodecSystem::ReleaseEncoder( IEncoder* _encoder )
    {
        OGGSoundEncoder* oggEncoder = static_cast<OGGSoundEncoder*>(_encoder);
        oggEncoder->Shutdown();
        delete oggEncoder;
    }    
    ////////////////////////////////////////////////////////////////////////////////////////////////
}   // namespace nane
